﻿using System.Collections.Generic;
using Fuse8.DomainFramework.Domain;

namespace Fuse8.DomainFramework.CacheService
{
    /// <summary>
    /// 
    /// </summary>
    public interface ICacheKeyService
    {
    	/// <summary>
    	/// 
    	/// </summary>        
    	/// <returns></returns>
    	string GenerateCacheKey(params object[] parameters);
		
        /// <summary>
        /// 
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        string GenerateDependencyCacheKey(IEntityObject entity);

    	/// <summary>
    	/// 
    	/// </summary>
    	/// <returns></returns>
		string GenerateDependencyCacheKeyTag(string tag);


    	/// <summary>
    	/// 
    	/// </summary>
    	/// <returns></returns>
		string GenerateAddCacheKyeTag(string cacheKey);

        /// <summary>
        /// 
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        IList<string> GenerateCacheKeysForLinkedDependency<TEntity>(TEntity entity) where TEntity : class, IEntityObject;
    }
}